package service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

import model.Role;
import model.RoleModule;
import model.User;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;

import dao.RoleDao;
import dao.RoleModuleDao;

@Service
public class RoleService {
	@Autowired
	private RoleDao roleDao;
	@Autowired
	private RoleModuleDao roleModuleDao;

	/**
	 * 新增 或 修改
	 * 
	 * @param role
	 */
	public void saveOrUpdate(Role role) {
		role.setCreatetime(new Date());
		if (role.getId() == null) {
			roleDao.save(role);
		} else {
			roleDao.update(role);
		}
	};

	/**
	 * 删除
	 * 
	 * @param ids
	 */
	public void delete(String ids) {
		String[] idStrs = ids.split(",");
		for (String id : idStrs) {
			Integer _id = Integer.parseInt(id);
			// 删除角色
			roleDao.delete(_id);
			// 删除角色模块关联表
			roleModuleDao.deleteByRoleId(_id);
		}
	}

	/**
	 * 分页
	 * 
	 * @param pageBounds
	 * @return
	 */
	public PageList<HashMap<String, Object>> queryPage(int page, int limit) {
		PageBounds pageBounds = new PageBounds(page, limit);
		List<HashMap<String, Object>> list = roleDao.queryPage(pageBounds);
		PageList<HashMap<String, Object>> pageList = (PageList<HashMap<String, Object>>) list;
		return pageList;
	}

	/**
	 * 根据roleid拿到moduleid list
	 * 
	 * @param roleid
	 * @return
	 */
	public List<HashMap<String, Object>> queryModuleByRole(Integer roleid) {
		return roleModuleDao.queryModuleByRole(roleid);
	};

	/**
	 * 保存rolemodule
	 * 
	 * @param roleid
	 * @param moduleids
	 */
	public void saveRoleModule(Integer roleid, String[] moduleids) {
		roleModuleDao.deleteByRoleId(roleid);
		for (String moduleid : moduleids) {
			RoleModule roleModule = new RoleModule();
			roleModule.setRoleid(roleid);
			roleModule.setModuleid(Integer.parseInt(moduleid));
			roleModuleDao.save(roleModule);
		}
	}

	public Integer queryUserRole(User user) {
		List<HashMap<String, Object>> roles = roleDao.getRoles(user.getId());
		Integer roleFlag = 4; // 初始最低权限
		for (int i = 0; i < roles.size(); i++) {
			Integer roleid = (Integer) roles.get(i).get("roleid");
			/* 最高权限:开发、系统 业务管理 */
			if (roleid.equals(1) || roleid.equals(7) || roleid.equals(8)) {
				roleFlag = 1;
				break; // 最高权限，跳出循环
			}
			/* 市质监局 */
			else if (roleid.equals(9)) {
				roleFlag = 2;
			}
			/* 区质监局 */
			else if (roleid.equals(10)) {
				roleFlag = 3;
			}
			/* 社区管理员以及平民 */
			else {
				roleFlag = 4;
			}
		}
		return roleFlag;
	}
}
